<?php

/**
 * 安心站长axzz.cn，一个追求技术创造者。让网站、小程序、APP、应用程序牛起来……
 *
 * cighsne02 365182575
 *
 * Create at: 2022.01.31
 * update at: 2025.09.16
 */

namespace Twoir\Controller;

use Exception;
use Twoir\Service\BaseMember;
use Twoir\Service\Member\Login;
use Twoir\Service\Member\Register;
use Twoir\Service\Member\Widgets;
use Twoir\Service\ShowKey\Image;
use Twoir\Service\ShowKey\QaImage;

/**
 * 会员模块
 *
 * 功能有：登陆、注册、退出等
 */
class Member
{
    const VERSION = '1.8.3';

    /**
     * 用户登陆
     *
     * @param array $add POST对象
     * @return array
     */
    public static function login(array $add): array
    {
        $function_name = 'userName';

        // 用户支持手机
        if (isset($add['phone']) || (isset($add['username']) && preg_match('/^1(3[3-9]|4[579]|5[0-35-9]|6[6]|7[0135678]|8[0-9]|9[013589])\d{8}$/', $add['username']))) {

            $function_name = 'phone';
        }

        return call_user_func_array([new Login(), $function_name], [$add]);
    }

    /**
     * 用户注册
     *
     * @param array $add POST对象
     * @return array
     */
    public static function register(array $add): array
    {
        return call_user_func_array([new Register(), 'userName'], [$add]);
    }

    /**
     * 退出登陆
     * 
     * @return void
     */
    public static function logout(): void
    {
        call_user_func([new BaseMember(), __FUNCTION__]);
    }

    /**
     * 获取验证码
     * 
     * @param array $add
     * @return string
     */
    public static function showKey(array $add): string
    {
        if (isset($add['style']) && 2 == $add['style']) {

            if (!class_exists(QaImage::class)) throw new Exception('请先安装', 9200);

            return call_user_func_array([new QaImage(), 'base64DataURI'], [$add]);
        }

        return call_user_func_array([new Image(), 'base64DataURI'], [$add]);
    }

    /**
     * 增加收藏
     *
     * @param array $add
     * @return array
     */
    public static function setFava(array $add): array
    {
        return call_user_func_array([new Widgets(), __FUNCTION__], [$add]);
    }

    /**
     * 方法不存在时 404
     *
     * @param string $name
     * @param array $parameters
     *
     * @throws Exception
     */
    public static function __callStatic(string $name, array $parameters)
    {
        throw new Exception('参数错误', 9200);
    }
}
